package com.dong.HashMap.arithemtic;

import java.util.HashSet;

/*
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，
然后重复这个过程直到这个数变为 1，也可能是无限循环但始终变不到 1。如果可以变为 1，那么这个数就是快乐数。
如果n是快乐数就返回 True ；不是，则返回 False 。

解题：
    算法分为两部分，我们需要设计和编写代码。
    1.给一个数字 nn，它的下一个数字是什么？
    2.按照一系列的数字来判断我们是否进入了一个循环。
    第1部分我们按照题目的要求做数位分离，求平方和。
    第2部分可以使用哈希集合完成。每次生成链中的下一个数字时，我们都会检查它是否已经在哈希集合中。
        如果它不在哈希集合中，我们应该添加它。
        如果它在哈希集合中，这意味着我们处于一个循环中，因此应该返回 false。
 */
public class Demo3 {
    public static void main(String[] args) {
        int n = 2;
        boolean happy = isHappy(n);
        System.out.println(happy);

    }

    //求一个数每一位的平方和
    public static int get_sum(int n) {
        int sum = 0;
        //首先将整数的各位取出来做平方求和
        while (n > 0) {
            int d = n % 10; //取出个位数
            n = n / 10;  //去掉一位数（去掉两位数n/100）
            sum += d * d;
            System.out.println(sum);
        }
        return sum;
    }



    public static boolean isHappy(int n) {
        HashSet<Integer> set = new HashSet<>();
        while (n!=1&&!set.contains(n)){
            set.add(n);
            n = get_sum(n);

        }
        System.out.println(set);
        return n==1;
    }
}
